/**
 * 
 */
package cz.cuni.mff.abacs.burglar.logics.objects.positions;

import cz.cuni.mff.abacs.burglar.logics.DataMap;
import cz.cuni.mff.abacs.burglar.logics.objects.BaseInterface;
import cz.cuni.mff.abacs.burglar.logics.objects.BaseObject;
import cz.cuni.mff.abacs.burglar.logics.objects.Room;


/** 
 * Position type where the 
 * {@link cz.cuni.mff.abacs.burglar.logics.objects.agents.Agent agents}
 * can stand.
 * 
 * @author abacs
 *
 */
public class Floor extends BasePosition implements Position {
	
	
	
	// -------------------------------------------------------------------------
	// constructors:
	
	
	/**
	 * 
	 * 
	 * @param id
	 * @param x
	 * @param y
	 * @param room
	 * @param referenceMap
	 */
	public Floor(int id, int x, int y, Room room, DataMap referenceMap) {
		super(id, BaseObject.Type.FLOOR, x, y, true, room, referenceMap);
		
	}
	
	
	/**
	 * 
	 * 
	 * @param id
	 * @param x
	 * @param y
	 * @param room
	 * @param referenceMap
	 */
	public Floor(int id, int x, int y, int roomId, DataMap referenceMap) {
		super(id, BaseObject.Type.FLOOR, x, y, true, roomId, referenceMap);
		
	}
	
	
	/**
	 * 
	 * @param other
	 * @param referenceMap
	 */
	protected Floor(Floor other, DataMap referenceMap) {
		super(other, referenceMap);
	}
	
	
	// -------------------------------------------------------------------------
	// methods:
	
	
	@Override
	public boolean isOperable() {
		return false;
	}
	
	
	@Override
	public boolean isTrap() {
		return false;
	}
	
	
	// -------------------------------------------------------------------------
	
	
	
	// -------------------------------------------------------------------------
	
	
	/**
	 * The agent does not recognize this block.
	 */
	@Override
	public Position examinedFromFar() {
		return null;
	}
	
	
	/**
	 * The agent does not recognize this block.
	 */
	@Override
	public Position examinedFromNear() {
		return null;
	}
	
	
	@Override
	public boolean matchesFromFar(Position position) {
		return super.matches(position);
	}
	
	
	@Override
	public boolean matchesFromClose(Position position) {
		return super.matches(position);
	}
	
	
	@Override
	public void copyChangeables(Position original) {
		assert(original.isTypeOf(BaseInterface.Type.FLOOR));
	}
	
	
	@Override
	public Position copy(DataMap referenceMap) {
		return new Floor(this, referenceMap);
	}
	
}
